package main

import (
	"fmt"
	"regexp"
)

// 正则表达式

const text = "My email is wwss@gmail.com"

func main() {
	// 两种方式差别在于一个需要接收err另一个不需要接收err

	// 第一种方式
	// 一般情况如果是自己写的正则表达，一般情况下都是正确的正则表达式，所以就不要接收校验正则表达式的错误信息
	// 就可以直接使用这个方式
	// compile := regexp.MustCompile("wwss@gmail.com")

	// 第二种方式
	// 这种方式会检验这个正则表达式的语法是否正确
	// re, err := regexp.Compile("wwss@gmail.com")
	re, err := regexp.Compile(`[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+`)
	if err != nil {
		panic(err)
	}

	// 获取匹配的字符，只会匹配第一个出现的
	// match := re.FindString(text)
	// 可以配多少个（第二个参数是选择匹配多少个，值为 -1 就表示不限制）
	match := re.FindAllString(text, -1)
	fmt.Println(match)

	// =======  提取子串 ========

	reg := regexp.MustCompile(`([a-zA-Z0-9]+)@([a-zA-Z0-9]+)\.([a-zA-Z0-9]+)`)
	// 获取匹配到的数据
	// 返回的是一个数组，匹配到的数据都会放进这个数组，是一个二维数组
	matchString := reg.FindAllStringSubmatch(text, -1)
	// fmt.Println(matchString)
	for index, str := range matchString {
		fmt.Printf("下坐标：%v, 获取到的值：%v", index, str)
	}
}
